package gggone

import java.text.*;
import java.util.regex.Pattern;
import java.util.*;

class AngebotController extends BaseController{

	def beforeInterceptor = [action:this.&auth, except:[
			'kontakt',
			'impressum',
			'agb',
			'ueberuns'
		]]//beforeInterceptor

	def AngebotEinstellen = {

		if(request.method == "POST") {
			def a = new Angebot(params)
			DateFormat formatter = new SimpleDateFormat("dd.MM.yyyy")
			String AktuellesDatum = formatter.format(new Date());

			boolean Datumsabfrage=false;

			int VergleichsJahr = (Integer.parseInt(AktuellesDatum.substring(6, 10)));
			int VergleichsMonat = Integer.parseInt(AktuellesDatum.substring(3, 5));
			int VergleichsTag = Integer.parseInt(AktuellesDatum.substring(0, 2));

			int AusgewaehltesJahr = Integer.parseInt(params.Jahr);
			int AusgewaehlterMonat = Integer.parseInt(params.Monat);
			int AusgewaehlterTag = Integer.parseInt(params.Tag);

			if (VergleichsJahr < AusgewaehltesJahr) {
				Datumsabfrage=true;
			}
			else {
				if(VergleichsJahr==AusgewaehltesJahr) {
					if(VergleichsMonat<AusgewaehlterMonat) {
						Datumsabfrage=true;
					}
					else {
						if(VergleichsMonat==AusgewaehlterMonat) {
							if(VergleichsTag<=AusgewaehlterTag) {
								Datumsabfrage=true;
							}//if
						}//if
					}//else
				}//if
			}//else

			if(Datumsabfrage==true)
			{
				int EndJahr = Integer.parseInt(params.EndJahr);
				int EndMonat = Integer.parseInt(params.EndMonat);
				int EndTag = Integer.parseInt(params.EndTag);

				Datumsabfrage=false

				if (AusgewaehltesJahr < EndJahr) {
					Datumsabfrage=true;}
				else
				{
					if(AusgewaehltesJahr==EndJahr)
					{
						if(AusgewaehlterMonat<EndMonat)
						{
							Datumsabfrage=true;
						}//if
						else
						{
							if(AusgewaehlterMonat==EndMonat)
							{
								if(AusgewaehlterTag<EndTag)
								{
									Datumsabfrage=true;
								}//if
							}//if
						}//else
					}//if
				}//else

				if(Datumsabfrage==true)
				{
					String tag
					if(EndTag>10)
						tag=EndTag
					else
						tag="0"+EndTag
					a.setAnfangszeit(params.Tag+"."+params.Monat+"."+params.Jahr)
					a.setLaufzeit(EndTag+"."+params.EndMonat+"."+params.EndJahr)
					a.user=session.user

					def uploadedFile = request.getFile('picture')
					if(!uploadedFile.empty){
						def webRootDir = servletContext.getRealPath("/")
						def userDir = new File(webRootDir, "/bild/${session.user.id}")
						userDir.mkdirs()
						uploadedFile.transferTo( new File( userDir, uploadedFile.originalFilename))
						a.bild = uploadedFile.originalFilename
						a.bildname = uploadedFile.getOriginalFilename()
					}//!uploaded empty

					if(a.save()){

						a.save(flush:true)

						redirect(url:'http://localhost:8080/GGGone/angebot/list')
					}//if save

					else
					{
						flash['message'] = 'Artikel konnte nicht angelegt werden, da nicht alle Eingaben korrekt waren.'
					}//else save
				}
				else
				{
					flash['message'] = 'Enddatum liegt nicht nach dem Startdatum.'
				}//else datumsabfrage
			}

			else
			{
				flash['message'] = 'Artikel konnte nicht angelegt werden, da nicht alle Eingaben korrekt waren.'
			}//else

		}//if method

	}//def AngebotEinstellen

	def list = {
		def angebotInstanceList = Angebot.findAll()

		for(angebot in angebotInstanceList)
		{
			def aktDatum=new Date();
			String Datum=angebot.getLaufzeit()
			String[] segs = Datum.split( Pattern.quote( "." ) );

			int Tag=Integer.parseInt(segs[0]);
			int Monat=Integer.parseInt(segs[1]);
			int Jahr=Integer.parseInt(segs[2]);
			Jahr=Jahr-1900
			def laufzeit=new Date(Jahr,Monat-1,Tag+1,0,0,0);

			if(laufzeit<aktDatum)
			{
				if(angebot.getMailSent()==false)
				{
					User anbieter = User.findById(angebot.getUserId())
					try{
						sendMail {

							to anbieter.email
							subject "Angebot Versteigert"
							body (view: "/user/artikelversteigert")
						}
						User gewinner = User.findByBenutzername(angebot.getBieter())

						sendMail {

							to gewinner.email
							subject "Angebot Ersteigert"
							body (view: "/user/artikelersteigert")
						}}
					catch(Exception e)
					{angebot.setMailSent(true)
					}
				}
			}

		}

		angebotInstanceList = Angebot.findAll()
		[angebotInstanceList: angebotInstanceList]
	}//def list

	def show = {
		if(request.method=="GET")
		{
			session.angebot=Angebot.get(params.id)
			def angebotInstance = Angebot.get(params.id)
			if (!angebotInstance) {
				redirect(action: "list")
			}//if
			else {
				def anbieter = User.get(angebotInstance.user.id)
				def anbieterName = anbieter.benutzername

				if(anbieterName==session.user.benutzername)
				{
					def report="true"

					String Datum=angebotInstance.getAnfangszeit()
					String[] segs = Datum.split( Pattern.quote( "." ) );

					int VergleichsTag=Integer.parseInt(segs[0]);
					int VergleichsMonat=Integer.parseInt(segs[1]);
					int VergleichsJahr=Integer.parseInt(segs[2]);

					DateFormat formatter = new SimpleDateFormat("dd.MM.yyyy");
					String AktuellesDatum = formatter.format(new Date());

					int AktuellesJahr = (Integer.parseInt(AktuellesDatum.substring(6, 10)));
					int AktuellerMonat = Integer.parseInt(AktuellesDatum.substring(3, 5));
					int AktuellerTag = Integer.parseInt(AktuellesDatum.substring(0, 2));

					boolean Datumsabfrage=false;

					if (VergleichsJahr > AktuellesJahr) {
						Datumsabfrage=true;
					}
					else {
						if(VergleichsJahr==AktuellesJahr) {
							if(VergleichsMonat>AktuellerMonat) {
								Datumsabfrage=true;
							}
							else {
								if(VergleichsMonat==AktuellerMonat) {
									if(VergleichsTag>AktuellerTag) {
										Datumsabfrage=true;
									}//if
								}//if
							}//else
						}//if
					}//else
					if (Datumsabfrage==true)
					{def loeschen="true"
						[angebotInstance: angebotInstance, anbieterName: anbieterName, loeschen: loeschen, report: report]}
					else
					{
						[angebotInstance: angebotInstance, anbieterName: anbieterName, report: report]}
				}//if
				else
				{
					String Datum=angebotInstance.getAnfangszeit()
					String[] segs = Datum.split( Pattern.quote( "." ) );

					int VergleichsTag=Integer.parseInt(segs[0]);
					int VergleichsMonat=Integer.parseInt(segs[1]);
					int VergleichsJahr=Integer.parseInt(segs[2]);

					def aktuellesDatum = new Date();

					def VergleichsDatum=new Date(VergleichsJahr-1900, VergleichsMonat-1, VergleichsTag,0,0,0);

					System.out.println(VergleichsDatum)
					System.out.println(aktuellesDatum)
						
					if(VergleichsDatum<aktuellesDatum)
					{
						Datum=angebotInstance.getLaufzeit()
						segs = Datum.split( Pattern.quote( "." ) );

						VergleichsTag=Integer.parseInt(segs[0]);
						VergleichsMonat=Integer.parseInt(segs[1]);
						VergleichsJahr=Integer.parseInt(segs[2]);
						VergleichsDatum=new Date(VergleichsJahr-1900, VergleichsMonat-1, VergleichsTag,23,59,59);

						if(VergleichsDatum>aktuellesDatum)
						{
							def bieten=true
							[angebotInstance: angebotInstance, anbieterName: anbieterName, bieten: bieten]
						}
						else
						{
							[angebotInstance: angebotInstance, anbieterName: anbieterName]
						}

					}
					else
					{
						[angebotInstance: angebotInstance, anbieterName: anbieterName]
					}

				}//else

			}//else
		}//if

		else
		{
			if(params.Gebot)
			{
				String zahl=params.Gebot
				zahl=zahl.replace(',','.')
				float x = Float.parseFloat(zahl)
				def angebotInstance = Angebot.get(params.id)

				if (x >= angebotInstance.startpreis)
				{
					if(x > angebotInstance.aktuellesGebot){
						angebotInstance.bieter = session.user.benutzername
						angebotInstance.aktuellesGebot = x
						angebotInstance.addToGebot(new Gebot(gebot:x,Benutzername:session.user.benutzername))	//neues Gebot erzeugt in Gebotstabelle
						redirect (action: "list")
						flash['message'] = 'Sie sind nun der H&ouml;chstbietende.'
					}//if

					else{
						redirect (action: "list")
						flash['message'] = 'Ihr abgegebenes Gebot muss h&ouml;her sein als der aktuelle Preis.'
					}//else
				}//if

				else{
					redirect (action: "list")
					flash['message'] = 'Ihr abgegebenes Gebot muss h&ouml;her sein als der aktuelle Preis.'
				}//else
			}
			else
			{
				redirect (action: "list")
				flash['message'] = 'Bitte Gebot eingeben'
			}
		}
	}//def show

	def showMeineAuktionen = {

		def anbieter = session.user.id
		def angebotList = Angebot.findAllByUser( User.get( anbieter ) )

		if (angebotList != []){
			def inhalt = true
			[angebotInstanceList: angebotList, inhalt: inhalt]
		}

	}//def showMeineAuktionen

	def showTeilgenommeneAuktionen = {

		def teilnehmer = session.user.benutzername

		def gebotInstanceList = Gebot.findAllByBenutzername(teilnehmer)

		List angebotList = new ArrayList ()

		for (a in gebotInstanceList){
			angebotList.addAll(Angebot.findAllById(a.angebot.id))
		}//for

		if (angebotList != []){
			def inhalt = true
			[angebotInstanceList: angebotList.unique(), inhalt: inhalt]
		}

	}//def showTeilgenommeneAuktionen

	def search = {
		if(request.method == 'POST'){
			render(view:'list', model:[angebotList: Angebot.findAllByAngebotNameLike('%'+params.angebotName+'%')])
		}//if method
	}//def search

	def report = {

		def gebotInstanceList = Gebot.findAllByAngebot(Angebot.get(params.id))
		if (gebotInstanceList == []){
			[gebotInstanceList: gebotInstanceList]
		}
		
		else{
		def gebote = true
		[gebotInstanceList: gebotInstanceList, gebote: gebote]
		}

	}//def report

	def agb = {

	}//def agb

	def impressum =  {

	}//def impressum

	def kontakt = {

	}//def kontakt

	def ueberuns = {

	}//def ueberuns

	def loeschen={

		def angebotInstance = Angebot.get(params.id)
		if (angebotInstance) {
			try {
				angebotInstance.delete(flush: true)
				redirect(controller: "angebot", action: "list")
			}
			catch (org.springframework.dao.DataIntegrityViolationException e) {
				flash.message = "Konnte nicht gel&ouml;scht werden"
				redirect(action: "show", id: params.id)
			}
		}

	}//def loeschen

	def texaner={
	
		println "blub"
		
	}

	def zurueck={
		redirect(url:"http://localhost:8080/GGGone/angebot/show/"+session.angebot.getId())
	}

	def showGewonneneAuktionen={

		def angebotList = Angebot.findAllByBieterAndMailSent(session.user.benutzername,true)

		if (angebotList != []){
			def inhalt = true
			[angebotInstanceList: angebotList, inhalt: inhalt]
		}
	}//def showGewonneneAutkionen
}//class
